public class Code1 {
    // 按摩师
    public int massage(int[] nums) {
        // 1、创建 dp 表
        // 2、初始化
        // 3、填表
        // 4、返回值

        // 先获取一下当前数组的长度
        int n = nums.length;
        if(n == 0) return 0;
        // 这里的 dp 表表示的是到 i 位置时，此时的最长预约时长
        // 这里就需要创建出两个 dp 表
        // f[i] 表示的是选择到 i 位置的时候，此时 nums 必选，此时的最长预约时长
        // g[i] 表示的是选择到 i 位置时，此时 nums 不选，此时的最长预约时长
        int[] f = new int[n];
        int[] g = new int[n];
        // 此时初始化就要针对 dp 表的第一个元素进行操作
        // f 表是必选的表
        f[0] = nums[0];
        // g 表是不选的表
        g[0] = 0;
        for(int i = 1; i < n; i++){
            f[i] = g[i - 1] + nums[i];
            g[i] = Math.max(f[i - 1], g[i - 1]);
        }
        // 需要注意的是这里的返回值信息
        // nums 的最后一个值既有选，也有不选的情况
        // f[n - 1] 表示的是 nums 中的最后一个值选
        // g[n - 1] 表示的是 nums 中最后一个值不选
        // 也就是说 dp 表的最后一个位置的值是空着的。
        return Math.max(f[n - 1],g[n - 1]);
    }
}
